package org.zffc.boot.starter.vault.enums;

import lombok.Getter;

public enum KeyLengthEnum {
    // 对称加密
    AES_128("AES", 128),
    AES_192("AES", 192),
    AES_256("AES", 256),

    // 非对称加密
    RSA_1024("RSA", 1024),
    RSA_2048("RSA", 2048),
    RSA_3072("RSA", 3072),
    RSA_4096("RSA", 4096),
    ECC_256("EC", 256, "secp256r1"), // 使用椭圆曲线名称
    ECC_384("EC", 384, "secp384r1"),
    EDDSA_25519("Ed25519", 256); // 需要 Bouncy Castle

    /**
     * -- GETTER --
     *  获取算法名称
     */
    @Getter
    private final String algorithm; // 算法名称（如 "AES", "RSA"）
    /**
     * -- GETTER --
     *  获取密钥位数
     */
    @Getter
    private final int bits;// 密钥位数
    @Getter
    private final String ecCurve;   // 仅对 ECC 有效，椭圆曲线名称

    // 构造函数（对称加密和非对称加密通用）
    KeyLengthEnum(String algorithm, int bits) {
        this(algorithm, bits, null);
    }

    // 构造函数（ECC 专用）
    KeyLengthEnum(String algorithm, int bits, String ecCurve) {
        this.algorithm = algorithm;
        this.bits = bits;
        this.ecCurve = ecCurve;
    }

    /**
     * 是否为对称加密（如 AES）
     */
    public boolean isSymmetric() {
        return "AES".equals(algorithm);
    }

    /**
     * 是否为非对称加密（如 RSA/ECC）
     */
    public boolean isAsymmetric() {
        return !isSymmetric();
    }

}
